package com.atzly.community.datasource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.sql.DataSource;
import java.util.Collections;
import java.util.List;

/**
 * 数据源数组，支持数据库多节点主从复制模式
 * 注意： 无论是否几个节点，都会生成一个ArrayDataSource作为数据源封装
 */
public class ArrayDataSource {
    private final static Logger logger = LoggerFactory.getLogger(ArrayDataSource.class);
    private List<DataSource> dataSources;

    public ArrayDataSource(List<DataSource> dataSources) {
        this.dataSources = Collections.unmodifiableList(dataSources);
    }

    public DataSource getDataSource() {
        if (dataSources.size() == 1) {
            return dataSources.get(0);
        }
        int index = getDataSourceIndexTimeStrategy();
        if (index < 0 || index >= dataSources.size()) {
            index = 0;
        }
        return dataSources.get(index);
    }

    /**
     * 按时间戳获取数据源
     * 看看效果，后面可以增加更多的随机算法
     */
    private int getDataSourceIndexTimeStrategy() {
        int size = dataSources.size();
        long index = System.currentTimeMillis() % size;
        return (int) index;
    }

}
